package verificaforcadasenha;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Felipe Tavares
 */
public class Implementacao02 extends Implementador 
{    
    private final static String MUITO_FRACO = "Muito Fraco";
    private final static String FRACO = "Fraco";
    private final static String MEDIO = "Médio";
    private final static String FORTE = "Forte";
    private final static String MUITO_FORTE = "Muito Forte";
    
    @Override
    public String obterForcaDaSenha(String senha){
        
        Regra02 pontuacaoTotalDaSenha = new Regra02(senha);
        
        pontuacao += pontuacaoTotalDaSenha.pontuacaoPeloTamanhoDaSenha(senha);
        
        try {
            pontuacao = pontuacaoTotalDaSenha.pontuacaoPorTamanhoDaSenhaDefinidos(senha, pontuacao);
            pontuacao = pontuacaoTotalDaSenha.pontuacaoPorQuantidadeDeCaracteresEspecificos(senha, pontuacao);
            pontuacao = pontuacaoTotalDaSenha.subtrairPontosDaPontuacao(senha, pontuacao);
        } catch (appSenhaException ex) {
            Logger.getLogger(Implementacao02.class.getName()).log(Level.SEVERE, null, ex);
        }
        return obterRanking(pontuacao);
    }
    
    private String obterRanking(int pontuacao){
        String ranking [] = { MUITO_FRACO, FRACO, MEDIO, FORTE, MUITO_FORTE };
        int pontuacaoParaRanking [] = { 20, 40, 60, 80, Integer.MAX_VALUE };
        
        return Utils.obterResultadoDaPontuacaoNoIntervalo(pontuacao, pontuacaoParaRanking, ranking);
    }
}
